// utils/storage.js

const Storage = {
  /**
   * 设置缓存（带有效期）
   * @param {string} key 键名
   * @param {any} value 值
   * @param {number} [expireSeconds=0] 过期时间(秒)，0表示永不过期
   * @returns {boolean}
   */
  set(key, value, expireSeconds = 0) {
    try {
      const data = {
        _value: value, // 实际存储的值
        _expire: expireSeconds ? Date.now() + expireSeconds * 1000 : 0,
        _created: Date.now() // 添加创建时间用于调试
      }
      wx.setStorageSync(key, data)
      return true
    } catch (e) {
      console.error(`[Storage] 存储失败: ${key}`, e)
      return false
    }
  },

  /**
   * 获取缓存
   * @param {string} key 键名
   * @param {any} [defaultValue=null] 默认值
   * @returns {any}
   */
  get(key, defaultValue = null) {
    try {
      const data = wx.getStorageSync(key);
      // 检查数据格式是否合法
      if (!data || typeof data !== 'object' || !('_value' in data)) {
        this.remove(key)
        return defaultValue
      }
      // --console.log(`${key}`,Math.floor((data._expire-Date.now())/(1000*60)),`${data._value}`)
      // 检查是否过期（只有_expire>0时才检查）
      if (data._expire > 0 && Date.now() > data._expire) {
        console.log(`[Storage] 数据已过期: ${key}`, {
          storedTime: new Date(data._created).toISOString(),
          expireTime: new Date(data._expire).toISOString(),
          currentTime: new Date().toISOString()
        })
        this.remove(key)
        return defaultValue
      }
      
      return data._value
    } catch (e) {
      return defaultValue
    }
  },

  /**
   * 移除指定缓存
   * @param {string} key 键名
   * @returns {boolean}
   */
  remove(key) {
    try {
      wx.removeStorageSync(key)
      return true
    } catch (e) {
      return false
    }
  },

  /**
   * 清空所有缓存
   * @returns {boolean}
   */
  clear() {
    try {
      wx.clearStorageSync()
      return true
    } catch (e) {
      return false
    }
  },

  /**
   * 调试方法：获取存储详情（包括剩余有效期）
   * @param {string} key 键名
   * @returns {object|null}
   */
  debug(key) {
    try {
      const data = wx.getStorageSync(key)
      if (!data) return null
      
      return {
        value: data._value,
        created: new Date(data._created),
        expire: data._expire ? new Date(data._expire) : '永不过期',
        remaining: data._expire ? Math.max(0, (data._expire - Date.now()) / 1000) + '秒' : '永不过期'
      }
    } catch (e) {
      return null
    }
  }
}

module.exports= Storage